//  Created by Bodmer 24th Jan 2017 - Tested in Arduino IDE 1.8.5 esp8266 Core 2.4.0

// The latest Arduino IDE versions support UTF-8 encoding of Unicode characters
// within sketches:
// https://playground.arduino.cc/Code/UTF-8

/*
    The library expects strings to be in UTF-8 encoded format:
    https://www.fileformat.info/info/unicode/utf8.htm

    Creating varaibles needs to be done with care when using character arrays:
    char c = 'µ';          // Wrong
    char bad[4] = "5µA";   // Wrong
    char good[] = "5µA";   // Good
    String okay = "5µA";   // Good

    This is because UTF-8 characters outside the basic Latin set occupy more than
    1 byte per character! A 16 bit unicode character occupies 3 bytes!

*/

//====================================================================================
//                                  Libraries
//====================================================================================
// Call up the SPIFFS FLASH filing system this is part of the ESP Core

#include <TFT_eSPI.h>      // Hardware-specific library

TFT_eSPI tft = TFT_eSPI(); // Invoke custom library

uint16_t bg = TFT_BLACK;
uint16_t fg = TFT_WHITE;


//====================================================================================
//                                    Setup
//====================================================================================
void setup() {
    Serial.begin(115200); // Used for messages and the C array generator

    Serial.println("NodeMCU vlw font test!");

    if (!SPIFFS.begin()) {
        Serial.println("SPIFFS initialisation failed!");
        while (1) {
            yield();    // Stay here twiddling thumbs waiting
        }
    }
    Serial.println("\r\nInitialisation done.");

    listFiles(); // Lists the files so you can see what is in the SPIFFS

    tft.begin();
    tft.setRotation(0);  // portrait

    fg = TFT_WHITE;
    bg = TFT_BLACK;
}

//====================================================================================
//                                    Loop
//====================================================================================
void loop() {
    tft.setTextColor(fg, bg);

    //----------------------------------------------------------------------------
    // Anti-aliased font test

    String test1 = "Hello World";

    // Load a smooth font from SPIFFS
    tft.loadFont("Final-Frontier-28");

    tft.setRotation(0);

    // Show all characters on screen with 2 second (2000ms) delay between screens
    tft.showFont(2000); // Note: This function moves the cursor position!

    tft.fillScreen(bg);
    tft.setCursor(0, 0);

    tft.println(test1);

    // Remove font parameters from memory to recover RAM
    tft.unloadFont();

    delay(2000);

    //----------------------------------------------------------------------------
    // We can have any random mix of characters in the font

    String test2 = "仝倀"; // Unicodes 0x4EDD, 0x5000

    tft.loadFont("Unicode-Test-72");

    tft.setRotation(1);

    // Show all characters on screen with 2 second (2000ms) delay between screens
    tft.showFont(2000); // Note: This function moves the cursor position!

    tft.fillScreen(bg);
    tft.setCursor(0, 0);

    tft.setTextColor(TFT_CYAN, bg);
    tft.println(test2);

    tft.setTextColor(TFT_YELLOW, bg);
    tft.println("12:00pm");

    tft.setTextColor(TFT_MAGENTA, bg);
    tft.println("1000Ω");

    // Remove font parameters from memory to recover RAM
    tft.unloadFont();

    delay(2000);

    //----------------------------------------------------------------------------
    // Latin and Hiragana font mix

    String test3 = "こんにちは";

    tft.loadFont("Latin-Hiragana-24");

    tft.setRotation(0);

    // Show all characters on screen with 2 second (2000ms) delay between screens
    tft.showFont(2000); // Note: This function moves the cursor position!

    tft.fillScreen(bg);
    tft.setTextColor(TFT_GREEN, bg);
    tft.setCursor(0, 0);

    tft.println("Konnichiwa");
    tft.println(test3);
    tft.println();
    tft.println("Sayonara");
    tft.println("さようなら"); // Sayonara

    // Remove font parameters from memory to recover RAM
    tft.unloadFont();

    delay(2000);
    //
    //----------------------------------------------------------------------------
}
//====================================================================================

